#!/bin/bash

######################################################################
#
#  Copyright (c) 2015 arakasi72 (https://github.com/arakasi72)
#
#  --> Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
#
######################################################################

PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin:/sbin

newvers=$(curl -s https://raw.githubusercontent.com/Novik/ruTorrent/master/js/webui.js | grep -m 1 version: | cut -d \" -f2)
oldvers=$(grep -m 1 version: /var/www/rutorrent/js/webui.js | cut -d \" -f2)

ruflag=0
rurelease=$(git ls-remote -t https://github.com/Novik/ruTorrent v\* | cut -d/ -f3 | sort -V | tail -1)
force_yes=1
restore_old=1
install_master=1

ask_restore() {
  if [ $force_yes = 0 ]; then
    return $restore_old
  else
    while true
      do
        echo "1. Restore rutorrent_old"
        echo "2. Upgrade to latest version"
        read -p "Select 1 or 2: " answer
        case $answer in [1]* ) return 0 ;;
                        [2]* ) return 1 ;;
      esac
    done
  fi
}

ask_version() {
  if [ $force_yes = 0 ]; then
    return $install_master
  else
    echo "Choose which build to install, (if you are not sure select 1)"
    while true
      do
        echo "1. Use the latest stable release"
        echo "2. Use the most recent master build"
        read -p "Select 1 or 2: " answer
        case $answer in [1]* ) return 1 ;;
                        [2]* ) return 0 ;;
      esac
    done
  fi
}


check_user() {
while true
  do
    read -p "Do you wish to continue? " answer
    case $answer in [Yy]* ) return 0 ;;
                    [Nn]* ) return 1 ;;
                        * ) echo "Enter y or n";;
    esac
  done
}

#check user is root or sudo
if [ "$(id -u)" != "0" ]; then
  echo "Must be run from root or using sudo" && exit 1
fi

# get options
OPTS=$(getopt -n "$0" -o myo --long "rutorrent-master,force-yes,restore-old" -- "$@")

eval set -- "$OPTS"

while true; do
  case "$1" in
    -m | --rutorrent-master ) install_master=0; shift;;
    -y | --force-yes ) force_yes=0; shift;;
    -o | --restore-old ) restore_old=0; shift;;
    -- ) shift; break ;;
     * ) break ;;
  esac
done

#check rutorrent folder exists
if ! [ -d '/var/www/rutorrent' ]; then
echo 'Could not find /var/www/rutorrent, exiting script'
exit
fi

#check versions
echo "Installed version: "$oldvers
echo "   Latest version: "$newvers

if [ -d $HOME'/rutorrent_old' ]; then
  echo
  echo "A previous backup is available to restore"
  echo
fi

if [ $restore_old = 0 ] && ! [ -d $HOME'/rutorrent_old' ]; then
  echo "No backup available to do a restore"
  exit
fi

#check to see if rutorrent_old exists, offer restore or upgrade options
if [ -d $HOME'/rutorrent_old' ];then
echo 'Detected '$HOME'/rutorrent_old'
  if ( ask_restore ); then
    echo "Restoring Old version of rutorrent"
    echo "WARNING: The current rutorrent will be overwitten by older backup"
    ruflag=1
    if [ $force_yes = 0 ] || ( check_user ); then
      echo "Restoring"
      rm -r /var/www/rutorrent
      mv -f $HOME/rutorrent_old /var/www/rutorrent
      echo "Setting permissions, Starting services"
      chown -R www-data:www-data /var/www
      echo "Done"
    else
      exit
    fi
  else
    echo "Rutorrent will be upgraded"
    echo "WARNING: rutorrent_old will be deleted"
    echo "If you wish to retain this older version you should exit this script, and rename or move it"
    if [ $force_yes = 0 ] || ( check_user ); then
      ruflag=0
    else
      exit
    fi
  fi
fi

if [ $ruflag = 0 ]; then

  if ( ask_version ); then
    rurelease=master
  fi

  if [ -d $HOME'/rutorrent_old' ]; then
    rm -r $HOME/rutorrent_old
    echo "rutorrent_old has been deleted"
  fi

  echo
  echo 'Installing version '$newvers' of rutorrent'
  echo 'Your existing rutorrent folder will be moved to '$HOME'/rutorrent_old'
  echo
  echo 'If you are not happy with the upgrade you can restore the old version, by rerunning this script'
  echo

  mv -f /var/www/rutorrent $HOME/rutorrent_old
  echo "Installing Rutorrent ($rurelease)"
  wget -q https://github.com/Novik/ruTorrent/archive/$rurelease.tar.gz
  tar -xzf $rurelease.tar.gz
  mv -f $(tar -tzf $rurelease.tar.gz | head -1) /var/www/rutorrent
  rm $rurelease.tar.gz

  git clone -q https://github.com/autodl-community/autodl-rutorrent.git /var/www/rutorrent/plugins/autodl-irssi

  rm -r /var/www/rutorrent/conf  >> /dev/null 2>&1
  cp -r $HOME/rutorrent_old/conf /var/www/rutorrent/conf  >> /dev/null 2>&1
  rm -r /var/www/rutorrent/share >> /dev/null 2>&1
  cp -r $HOME/rutorrent_old/share /var/www/rutorrent/share >> /dev/null 2>&1
  echo "Setting permissions, Starting services"
  chown -R www-data:www-data /var/www
  echo
  echo "Installation of RuTorrent complete"
fi
